/*
Driver.java
Autor: Luis Antonio Sigüenza Leiva
Carné: 10297
Fecha: 21 de Julio del 2011
*/


//import java.text.DecimalFormat;	
import java.util.Scanner;
import java.util.InputMismatchException;

public class Driver {
	public static void main(String[] args){
		
		//Creación de nuevos objetos de la clase ListaNodo
		ListaNodo<Double> pila1 = new ListaNodo<Double>();
		//Declaración de variables
		double num1, num2,resultado=0,dato1, dato2,ingreso;
		int opcion=0;
		
		
		System.out.println("-----------------------------------------");
                System.out.println("]|I{-------EXPRESIONES POSTFIX-------}I|[");
                System.out.println("-----------------------------------------\n");
                num1 = obtenerNumero("Ingrese el primer numero: \n",true);//Pedir al usuario el primer numero
                pila1.push(num1); //Almacenamos el primer numero en la pila
                num2 = obtenerNumero("Ingrese el segundo numero: \n",true);//Pedir al usuario el segundo numero
                pila1.push(num2); //Almacenamos el segundo numero en la pila
                System.out.println("-----------------------------------------\n");
            do{
			menu();
			opcion=(int)obtenerNumero("Ingrese opcion: \n",false); //Pedimos al usuario la opción deseada
			switch(opcion){
				case 1: 
					//Quitamos los dos ultimos valores y los retomamos en variables
					dato1 = pila1.pop();
					dato2 = pila1.pop();
                                        //Realizamos la resta
					resultado = dato1 + dato2;
					//Almacenamos los valores nuevamente y agregamos el resultado
					pila1.push(dato1);
					pila1.push(dato2);
					pila1.push(resultado);
					System.out.println("\nEl resultado es: " + resultado + "\n");
					break;
				case 2:
					//Quitamos los dos ultimos valores y los retomamos en variables
					dato1 = pila1.pop();
					dato2 = pila1.pop();
					//Realizamos la suma
					resultado= dato2 - dato1;
					//Almacenamos los valores nuevamente y agregamos el resultado
					pila1.push(dato2);
					pila1.push(dato1);
					pila1.push(resultado);
					System.out.println("\nEl resultado es: " + resultado + "\n");
				
					break;
				case 3:
					//Quitamos los dos ultimos valores y los retomamos en variables
					dato1 = pila1.pop();
					dato2 = pila1.pop();
					//Realizamos la multiplicación
					resultado= dato2 * dato1;
					//Almacenamos los valores nuevamente y agregamos el resultado
					pila1.push(dato2);
					pila1.push(dato1);
					pila1.push(resultado);
					System.out.println("\nEl resultado es: " + resultado + "\n");
			
					break;
				case 4:
					//Quitamos los dos ultimos valores y los retomamos en variables
					dato1 = pila1.pop();
					dato2 = pila1.pop();
					//Realizamos la division
					resultado= dato2/dato1;
					//Almacenamos los valores nuevamente y agregamos el resultado
					pila1.push(dato2);
					pila1.push(dato1);
					pila1.push(resultado);
					System.out.println("\nEl resultado es: " + resultado + "\n");
				
					break;
				case 5:
					ingreso = obtenerNumero("Ingrese numero: \n",true);//Pedir al usuario un nuevo numero
			        //Almacenamos el numero en la pila
					pila1.push(ingreso);
					break;
				case 6:
					System.out.println("-----------------------------------------");
			        System.out.println("]|I{---------------OFF---------------}I|[");
			        System.out.println("-----------------------------------------\n");
					break;
				default:
					System.out.println("\n--> Opcion Incorrecta\n");
					break;
			}
		}while(opcion!=6);	
	}
	
	//Método menu: muestra en pantalla el menu principal del probrama
	public static void menu() {
        System.out.println();
        System.out.println("-----------------------------------------");
        System.out.println("]|I{-------EXPRESIONES POSTFIX-------}I|[");
        System.out.println("-----------------------------------------");
        System.out.println("              MENU PRINCIPAL             ");
        System.out.println("-----------------------------------------"); 
        System.out.println("1. Suma                                  ");
        System.out.println("2. Resta                                 ");
        System.out.println("3. Multiplicacion                        ");
        System.out.println("4. Division                              ");
        System.out.println("5. Ingresar Numero                       ");
        System.out.println("6. Salir                                 ");
        System.out.println("-----------------------------------------"); 
    }
	
	//Método obtenerNumero: obtiene un número ingresado por el usuario
    public static double obtenerNumero(String msj, boolean mostrar){
        Scanner teclado = new Scanner(System.in);
        double numero2 = -1;
        double numero=0;
        do{
        	System.out.print(msj);
        	try{
                numero = teclado.nextDouble();
                numero2= -1;
            }
            catch(InputMismatchException exception){
                if (mostrar)
                    System.out.println("\nERROR - Dato Invalido\n");
                	numero2=0;
            }
            finally{
                teclado.nextLine();
            }
            
        }while(numero2!=-1);
	return numero;
    }
    
    
    
	
	
}